Add erase_t option to garmin to erase existsing courses when writing new ones.
authorrobertl <robertl>
Sun, 22 Aug 2010 19:37:55 +0000 (19:37 +0000)
committerrobertl <robertl>
Sun, 22 Aug 2010 19:37:55 +0000 (19:37 +0000)
garmin.c
jeeps/gpscom.c
jeeps/gpscom.h

index fd01b6f2a7fb10ffb4d300fcc5463bb97cbf6107..73155d5f7588dfdee66e0d267cebf713ea2efd08 100644 (file)
--- a/garmin.c
+++ b/garmin.c
@@ -41,6 +41,7 @@ static GPS_PTrack *cur_tx_tracklist_entry;
 static int my_track_count = 0;
 static char *getposn = NULL;
 static char *poweroff = NULL;
+static char *eraset = NULL;                                                           
 static char *resettime = NULL;
 static char *snlen = NULL;
 static char *snwhiteopt = NULL;
@@ -68,6 +69,8 @@ arglist_t garmin_args[] = {
                NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
        { "power_off", &poweroff, "Command unit to power itself down", 
                NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+       { "erase_t", &eraset, "Erase existing courses when writing new ones",          
+               NULL, ARGTYPE_BOOL, ARG_NOMINMAX},                                     
        { "resettime", &resettime, "Sync GPS time to computer time", 
                NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
        { "category", &category, "Category number to use for written waypoints", 
@@ -1099,9 +1102,8 @@ track_write(void)
        int i, n;
 
        n = track_prepare();
-
-       GPS_Command_Send_Track(portname, tx_tracklist, n);
-
+       GPS_Command_Send_Track(portname, tx_tracklist, n, (eraset)? 1 : 0);            
+                                                                                      
        for (i = 0; i < n; i++) {
                GPS_Track_Del(&tx_tracklist[i]);
        }
@@ -1117,7 +1119,7 @@ course_write(void)
        n_trk = track_prepare();
 
        GPS_Command_Send_Track_As_Course(portname, tx_tracklist, n_trk,
-                                        tx_waylist, n_wpt);
+                                        tx_waylist, n_wpt, (eraset)? 1 : 0);          
 
        for (i = 0; i < n_wpt; ++i) {
                GPS_Way_Del(&tx_waylist[i]);
index ee80f686fe4cbb4f04cb917fb9a5a903e5e3944b..1e9f0eaeb33c96220427ae39fc3ff315e9648e6a 100644 (file)
@@ -259,7 +259,7 @@ int32 GPS_Command_Get_Track(const char *port, GPS_PTrack **trk, pcb_fn cb)
 ** @return [int32] success
 ************************************************************************/
 
-int32 GPS_Command_Send_Track(const char *port, GPS_PTrack *trk, int32 n)
+int32 GPS_Command_Send_Track(const char *port, GPS_PTrack *trk, int32 n, int eraset)
 {
     int32 ret=0;
 
@@ -278,7 +278,7 @@ int32 GPS_Command_Send_Track(const char *port, GPS_PTrack *trk, int32 n)
        /* Units with A302 don't support track upload, so we convert the
         * track to a course on the fly and send that instead
         */
-       ret = GPS_Command_Send_Track_As_Course(port, trk, n, NULL, 0);
+       ret = GPS_Command_Send_Track_As_Course(port, trk, n, NULL, 0, eraset);
        break;
     default:
        GPS_Error("Send_Track: Unknown track protocol %d.", gps_trk_transfer);
@@ -1168,7 +1168,7 @@ restart_course_points:
 ************************************************************************/
 
 int32 GPS_Command_Send_Track_As_Course(const char *port, GPS_PTrack *trk, int32 n_trk,
-                                       GPS_PWay *wpt, int32 n_wpt)
+                                       GPS_PWay *wpt, int32 n_wpt, int eraset)
 {
     GPS_PCourse *crs = NULL;
     GPS_PCourse_Lap *clp = NULL;
@@ -1179,8 +1179,13 @@ int32 GPS_Command_Send_Track_As_Course(const char *port, GPS_PTrack *trk, int32
     int32 ret;
 
     /* Read existing courses from device */
-    n_crs = GPS_Command_Get_Course(port, &crs, &clp, &ctk, &cpt, &n_clp, &n_ctk, &n_cpt, NULL);
-    if (n_crs < 0) return n_crs;
+    if (eraset)
+      n_crs = 0;
+    else {
+      n_crs = GPS_Command_Get_Course(port, &crs, &clp, &ctk, &cpt, &n_clp, &n_ctk, &n_cpt, NULL);
+      if (n_crs < 0) return n_crs;
+    }
+
 
     /* Create new course+lap+track points for each track */
     new_crs = n_crs;
index e55fe894303888eae01da6c3eda180f99249505c..2105e8d0b9876e5898b379b63de06fb2585de82f 100644 (file)
@@ -26,7 +26,7 @@ int32  GPS_Command_Get_Almanac(const char *port, GPS_PAlmanac **alm);
 int32  GPS_Command_Send_Almanac(const char *port, GPS_PAlmanac *alm, int32 n);
 
 int32  GPS_Command_Get_Track(const char *port, GPS_PTrack **trk, int (*cb)(int, struct GPS_SWay **));
-int32  GPS_Command_Send_Track(const char *port, GPS_PTrack *trk, int32 n);
+int32  GPS_Command_Send_Track(const char *port, GPS_PTrack *trk, int32 n, int eraset);
 
 int32  GPS_Command_Get_Waypoint(const char *port, GPS_PWay **way,int (*cb)(int, struct GPS_SWay **));
 int32  GPS_Command_Send_Waypoint(const char *port, GPS_PWay *way, int32 n, int (*cb)(struct GPS_SWay **));
@@ -43,7 +43,7 @@ int32  GPS_Command_Send_Course(const char *port, GPS_PCourse *crs, GPS_PCourse_L
                                GPS_PTrack *trk, GPS_PCourse_Point *cpt,
                                int32 n_crs, int32 n_clp, int32 n_trk, int32 n_cpt);
 int32  GPS_Command_Send_Track_As_Course(const char *port, GPS_PTrack *trk, int32 n_trk,
-                                        GPS_PWay *wpt, int32 n_wpt);
+                                        GPS_PWay *wpt, int32 n_wpt, int eraset);       
 
 int32  GPS_Command_Get_Workout(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
 int32  GPS_Command_Get_Fitness_User_Profile(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));